Skill

Jackson এর সাথে Custom Naming Strategy ব্যবহার

Java Technologies - জ্যাকসন (Jackson)
211

Jackson-এ Custom Naming Strategy ব্যবহার করা হয় JSON ফিল্ড নাম এবং Java অবজেক্টের ফিল্ড নামের মধ্যে একটি কাস্টম ম্যাপিং নির্ধারণ করতে। ডিফল্টভাবে, Jackson JSON ফিল্ড নাম এবং Java ফিল্ড নাম একই থাকে। তবে, কাস্টমাইজড নামের নিয়ম প্রয়োগ করার জন্য আপনি Custom Naming Strategy ব্যবহার করতে পারেন।


Custom Naming Strategy কনফিগার করার উপায়

Jackson-এ, আপনি একটি Custom Naming Strategy তৈরি করতে পারেন এবং এটি ObjectMapper-এ সেট করতে পারেন। এটি করার জন্য com.fasterxml.jackson.databind.PropertyNamingStrategy ক্লাস এক্সটেন্ড করতে হবে।


1. ডিফল্ট PropertyNamingStrategy এর উদাহরণ

Jackson ডিফল্টভাবে কয়েকটি Naming Strategy সরবরাহ করে:

  • SNAKE_CASE: JSON ফিল্ড নাম snake_case ফরম্যাটে কনভার্ট হবে।
  • UPPER_CAMEL_CASE: JSON ফিল্ড নাম UpperCamelCase ফরম্যাটে কনভার্ট হবে।
  • LOWER_CASE: JSON ফিল্ড নাম ছোট হাতের অক্ষরে কনভার্ট হবে।

উদাহরণ: SNAKE_CASE Naming Strategy

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;

public class DefaultNamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

        // Example object
        Person person = new Person("John Doe", 30);

        // Serialize to JSON
        String json = mapper.writeValueAsString(person);
        System.out.println("Serialized JSON: " + json);
    }
}

class Person {
    private String fullName;
    private int age;

    public Person(String fullName, int age) {
        this.fullName = fullName;
        this.age = age;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Output:

Serialized JSON: {"full_name":"John Doe","age":30}

2. Custom Naming Strategy তৈরি করা

আপনি আপনার নিজস্ব Naming Strategy তৈরি করতে পারেন PropertyNamingStrategy ক্লাস এক্সটেন্ড করে এবং translate মেথড ওভাররাইড করে।

Custom Naming Strategy উদাহরণ

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomNamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(new CustomNamingStrategy());

        // Example object
        Employee employee = new Employee("Alice Johnson", "Software Developer");

        // Serialize to JSON
        String json = mapper.writeValueAsString(employee);
        System.out.println("Serialized JSON: " + json);

        // Deserialize JSON to Object
        String inputJson = "{\"employee_name\":\"Alice Johnson\",\"employee_role\":\"Software Developer\"}";
        Employee deserializedEmployee = mapper.readValue(inputJson, Employee.class);
        System.out.println("Deserialized Employee: " + deserializedEmployee);
    }
}

class Employee {
    private String employeeName;
    private String employeeRole;

    public Employee() {}

    public Employee(String employeeName, String employeeRole) {
        this.employeeName = employeeName;
        this.employeeRole = employeeRole;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    public String getEmployeeRole() {
        return employeeRole;
    }

    public void setEmployeeRole(String employeeRole) {
        this.employeeRole = employeeRole;
    }

    @Override
    public String toString() {
        return "Employee{employeeName='" + employeeName + "', employeeRole='" + employeeRole + "'}";
    }
}

class CustomNamingStrategy extends PropertyNamingStrategies.NamingBase {
    @Override
    public String translate(String propertyName) {
        // Convert camelCase to custom naming strategy: e.g., employeeName -> employee_name
        return "employee_" + propertyName.toLowerCase();
    }
}

Output:

Serialized JSON: {"employee_name":"Alice Johnson","employee_role":"Software Developer"}
Deserialized Employee: Employee{employeeName='Alice Johnson', employeeRole='Software Developer'}

3. কাস্টম Naming Strategy এবং @JsonProperty একত্রে ব্যবহার

Jackson-এ আপনি @JsonProperty অ্যানোটেশন ব্যবহার করে নির্দিষ্ট ফিল্ডের নাম কাস্টমাইজ করতে পারেন। Naming Strategy এবং @JsonProperty একত্রে ব্যবহার করা সম্ভব।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonPropertyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Example object
        Department department = new Department("IT", "Information Technology");

        // Serialize to JSON
        String json = mapper.writeValueAsString(department);
        System.out.println("Serialized JSON: " + json);

        // Deserialize JSON to Object
        String inputJson = "{\"dept_id\":\"IT\",\"dept_name\":\"Information Technology\"}";
        Department deserializedDept = mapper.readValue(inputJson, Department.class);
        System.out.println("Deserialized Department: " + deserializedDept);
    }
}

class Department {
    @JsonProperty("dept_id")
    private String departmentId;

    @JsonProperty("dept_name")
    private String departmentName;

    public Department() {}

    public Department(String departmentId, String departmentName) {
        this.departmentId = departmentId;
        this.departmentName = departmentName;
    }

    public String getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(String departmentId) {
        this.departmentId = departmentId;
    }

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

    @Override
    public String toString() {
        return "Department{departmentId='" + departmentId + "', departmentName='" + departmentName + "'}";
    }
}

Output:

Serialized JSON: {"dept_id":"IT","dept_name":"Information Technology"}
Deserialized Department: Department{departmentId='IT', departmentName='Information Technology'}

  1. ডিফল্ট Naming Strategies (যেমন SNAKE_CASE, KEBAB_CASE) সরাসরি ব্যবহার করা যায়।
  2. Custom Naming Strategy তৈরি করে নির্দিষ্ট নিয়ম অনুসারে ফিল্ড নাম পরিবর্তন করা সম্ভব।
  3. @JsonProperty নির্দিষ্ট ফিল্ডে কাস্টম নাম নির্ধারণ করতে আরও নিয়ন্ত্রণ প্রদান করে।

Jackson-এর Naming Strategy ফিচার আপনার JSON এবং Java Object এর ফিল্ড নামের সামঞ্জস্যতা বজায় রাখতে সাহায্য করে।

Content added By

Custom Field Naming Strategy তৈরি করা

165

Jackson ডিফল্টভাবে Java ফিল্ডগুলোর নাম JSON ফিল্ডের নামে ব্যবহার করে। তবে, অনেক সময় JSON ফিল্ডের নাম Java ফিল্ডের নামের সাথে মিল থাকে না বা অন্য রকম ফরম্যাটিং (যেমন: snake_case বা kebab-case) প্রয়োজন হয়। এ ক্ষেত্রে Custom Field Naming Strategy ব্যবহার করে ফিল্ডের নাম নিয়ন্ত্রণ করা যায়।

Jackson PropertyNamingStrategy বা PropertyNamingStrategies ক্লাস ব্যবহার করে ফিল্ড নাম পরিবর্তন করার কৌশল সরবরাহ করে। তবে, যদি আপনার প্রয়োজন আরও কাস্টমাইজড নিয়ন্ত্রণ, তাহলে আপনি নিজস্ব Naming Strategy তৈরি করতে পারেন।


Built-in Naming Strategies

Jackson-এর কয়েকটি বিল্ট-ইন Naming Strategy:

  1. SNAKE_CASE: ফিল্ডের নামকে snake_case ফরম্যাটে পরিবর্তন করে।
  2. UPPER_CAMEL_CASE: ফিল্ডের নামকে UpperCamelCase ফরম্যাটে পরিবর্তন করে।
  3. KEBAB_CASE: ফিল্ডের নামকে kebab-case ফরম্যাটে পরিবর্তন করে।
  4. LOWER_CASE: ফিল্ডের নামকে ছোট হাতের অক্ষরে পরিবর্তন করে।

Custom Field Naming Strategy তৈরি করার ধাপসমূহ

ধাপ ১: Custom Naming Strategy তৈরি

PropertyNamingStrategy ক্লাস Extend করে আপনার নিজস্ব লজিক প্রয়োগ করুন।

ধাপ ২: ObjectMapper-এ Custom Naming Strategy সেট করুন।


উদাহরণ: Custom Field Naming Strategy

১. Custom Naming Strategy তৈরি
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.cfg.MapperConfig;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;

public class CustomNamingStrategy extends PropertyNamingStrategy {
    @Override
    public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
        return "custom_" + defaultName; // ফিল্ডের নামের আগে "custom_" যোগ করা
    }

    @Override
    public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {
        return "custom_" + defaultName; // Getter মেথডের জন্য
    }

    @Override
    public String nameForSetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {
        return "custom_" + defaultName; // Setter মেথডের জন্য
    }
}

২. ObjectMapper-এ Naming Strategy সেট করা
import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomFieldNamingExample {
    public static void main(String[] args) {
        try {
            // Custom Naming Strategy সেট করুন
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setPropertyNamingStrategy(new CustomNamingStrategy());

            // Object তৈরি
            User user = new User(1, "Rahim", "rahim@example.com");

            // Object থেকে JSON
            String json = objectMapper.writeValueAsString(user);
            System.out.println("Serialized JSON with Custom Naming: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class User {
    private int id;
    private String name;
    private String email;

    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

৩. আউটপুট:
{
  "custom_id": 1,
  "custom_name": "Rahim",
  "custom_email": "rahim@example.com"
}

Custom Naming Strategy উদাহরণ: Snake Case to Kebab Case

ফিল্ডের নামকে snake_case থেকে kebab-case-এ রূপান্তর করার জন্য Custom Naming Strategy:

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.cfg.MapperConfig;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;

public class SnakeToKebabNamingStrategy extends PropertyNamingStrategy {
    @Override
    public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
        return defaultName.replace("_", "-"); // snake_case কে kebab-case-এ পরিবর্তন
    }
}
ObjectMapper-এ সেট করুন:
objectMapper.setPropertyNamingStrategy(new SnakeToKebabNamingStrategy());

Built-in Strategy ব্যবহার

উদাহরণ: SNAKE_CASE ব্যবহার

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.ObjectMapper;

public class SnakeCaseExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

            User user = new User(1, "Rahim", "rahim@example.com");
            String json = objectMapper.writeValueAsString(user);
            System.out.println("Serialized JSON with SNAKE_CASE: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
আউটপুট:
{
  "id": 1,
  "name": "Rahim",
  "email": "rahim@example.com"
}

Custom Naming Strategy-এর উপকারিতা

  1. Dynamic Control: JSON ফিল্ডের নাম কাস্টমাইজ করতে পারার ক্ষমতা।
  2. Integration: অন্য সিস্টেম বা API-এর ফিল্ড নামের সাথে Java ফিল্ডের নাম সামঞ্জস্য করা।
  3. Reusability: একবার Naming Strategy তৈরি করলে এটি বহু স্থানে ব্যবহার করা যায়।

  1. Custom Field Naming Strategy তৈরি করতে PropertyNamingStrategy Extend করে প্রয়োজনীয় লজিক লিখতে হয়।
  2. Jackson বিল্ট-ইন SNAKE_CASE, KEBAB_CASE, ইত্যাদি Naming Strategy প্রদান করে।
  3. Custom এবং Built-in Naming Strategy ObjectMapper-এ সহজেই যুক্ত করা যায়, যা ফিল্ড নামের কাস্টমাইজেশন সহজ করে।
Content added By

Property Naming Strategy ব্যবহার করে JSON Fields এর নাম কাস্টমাইজ করা

187

Jackson-এ PropertyNamingStrategy বা PropertyNamingStrategies ব্যবহার করে Java ফিল্ডের নাম এবং JSON ফিল্ডের নামের মধ্যে কাস্টম ম্যাপিং তৈরি করা যায়। এটি বিশেষভাবে দরকার হয় যখন JSON ফিল্ডের নাম Java ফিল্ডের নামের থেকে ভিন্ন হয় বা নির্দিষ্ট নামকরণের কনভেনশন (যেমন snake_case বা kebab-case) অনুসরণ করতে হয়।


Property Naming Strategies

Jackson আপনাকে বিভিন্ন বিল্ট-ইন নামকরণ কৌশল প্রদান করে:

  1. SNAKE_CASE: ফিল্ড নামগুলিকে snake_case-এ রূপান্তর করে।
  2. UPPER_CAMEL_CASE: ফিল্ড নামগুলিকে UpperCamelCase-এ রূপান্তর করে।
  3. KEBAB_CASE: ফিল্ড নামগুলিকে kebab-case-এ রূপান্তর করে।
  4. LOWER_CASE: ফিল্ড নামগুলিকে lowercase-এ রূপান্তর করে।
  5. Custom Strategy: নিজের কাস্টম স্ট্র্যাটেজি তৈরি করা যায়।

কোড উদাহরণ

Step 1: Maven Dependency

প্রথমে, Jackson লাইব্রেরি আপনার প্রোজেক্টে যোগ করুন:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

Step 2: একটি ডেটা মডেল তৈরি করুন

Java ফিল্ডগুলোর নাম camelCase ফরম্যাটে থাকবে।

public class Person {
    private String firstName;
    private String lastName;
    private int age;

    // Constructors
    public Person() {}

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    // Getters and Setters
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Step 3: ObjectMapper-এ Naming Strategy সেট করুন

PropertyNamingStrategies ব্যবহার করে ফিল্ড নামের কনভেনশন পরিবর্তন করুন।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;

public class PropertyNamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        // Set SNAKE_CASE naming strategy
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

        // Create a Person object
        Person person = new Person("John", "Doe", 30);

        // Serialize: Java Object to JSON
        String json = objectMapper.writeValueAsString(person);
        System.out.println("Serialized JSON with SNAKE_CASE:");
        System.out.println(json);

        // Deserialize: JSON to Java Object
        String jsonInput = """
        {
          "first_name": "Jane",
          "last_name": "Smith",
          "age": 25
        }
        """;

        Person deserializedPerson = objectMapper.readValue(jsonInput, Person.class);
        System.out.println("Deserialized Object:");
        System.out.println(deserializedPerson.getFirstName() + " " + deserializedPerson.getLastName());
    }
}

Output

Serialized JSON

{
  "first_name": "John",
  "last_name": "Doe",
  "age": 30
}

Deserialized Object

Jane Smith

Custom Property Naming Strategy

আপনার প্রয়োজন অনুযায়ী কাস্টম স্ট্র্যাটেজি তৈরি করতে পারেন:

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;

public class CustomNamingStrategy extends PropertyNamingStrategy {
    @Override
    public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
        return "custom_" + defaultName; // Add "custom_" prefix to every field
    }
}

এই কাস্টম স্ট্র্যাটেজি ব্যবহার করতে ObjectMapper-এ সেট করুন:

objectMapper.setPropertyNamingStrategy(new CustomNamingStrategy());

Jackson-এর PropertyNamingStrategy এবং PropertyNamingStrategies ব্যবহার করে JSON ফিল্ডের নাম সহজেই কাস্টমাইজ করা যায়।

মূল সুবিধা:

  1. Standard Naming Conventions: snake_case, kebab-case ইত্যাদি সহজেই সামঞ্জস্যপূর্ণ করা।
  2. Custom Mapping: নিজের প্রয়োজন মতো কাস্টম স্ট্র্যাটেজি ব্যবহার।
  3. Flexible Integration: বিভিন্ন JSON ফরম্যাটের সাথে সহজে কাজ করা।

এটি REST API, ডেটা ট্রান্সফার অবজেক্ট (DTO), এবং অন্যান্য JSON ইন্টিগ্রেশন ক্ষেত্রে অত্যন্ত কার্যকর।

Content added By

Snake Case, Kebab Case, এবং Camel Case Naming স্টাইল

209

Jackson ডিফল্টভাবে camelCase (যেমন, firstName) ব্যবহার করে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করে। তবে, প্রজেক্টের প্রয়োজন অনুযায়ী snake_case (যেমন, first_name) বা kebab-case (যেমন, first-name) ফরম্যাট ব্যবহারের জন্য Jackson-এ কনফিগারেশন পরিবর্তন করা সম্ভব।


Naming Strategy সেটআপ করার ধাপ

Jackson এর PropertyNamingStrategy বা নতুন PropertyNamingStrategies API ব্যবহার করে বিভিন্ন নামকরণ স্টাইল সেট করা যায়।


1. Snake Case Naming Strategy

উদাহরণ: Snake Case ব্যবহার

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;

public class SnakeCaseExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        // Snake Case Naming Strategy সেট করা
        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

        User user = new User("John", "Doe");
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON (Snake Case): " + json);

        String inputJson = "{ \"first_name\": \"John\", \"last_name\": \"Doe\" }";
        User deserializedUser = mapper.readValue(inputJson, User.class);
        System.out.println("Deserialized User: " + deserializedUser);
    }
}

class User {
    private String firstName;
    private String lastName;

    // Constructor
    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters
    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    // toString Method
    @Override
    public String toString() {
        return "User{firstName='" + firstName + "', lastName='" + lastName + "'}";
    }
}

Output:

Serialized JSON (Snake Case): {"first_name":"John","last_name":"Doe"}
Deserialized User: User{firstName='John', lastName='Doe'}

2. Kebab Case Naming Strategy

উদাহরণ: Kebab Case ব্যবহার

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;

public class KebabCaseExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        // Kebab Case Naming Strategy সেট করা
        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);

        User user = new User("Jane", "Doe");
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON (Kebab Case): " + json);

        String inputJson = "{ \"first-name\": \"Jane\", \"last-name\": \"Doe\" }";
        User deserializedUser = mapper.readValue(inputJson, User.class);
        System.out.println("Deserialized User: " + deserializedUser);
    }
}

Output:

Serialized JSON (Kebab Case): {"first-name":"Jane","last-name":"Doe"}
Deserialized User: User{firstName='Jane', lastName='Doe'}

3. Camel Case Naming Strategy

Camel Case ডিফল্ট স্টাইল:

  • Jackson ডিফল্টভাবে camelCase ব্যবহার করে। কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন নেই।

4. Custom Naming Strategy

Custom Naming Strategy তৈরি:

আপনার নিজের কাস্টম নামকরণ স্ট্র্যাটেজি তৈরি করতে PropertyNamingStrategy এক্সটেন্ড করুন।

import com.fasterxml.jackson.databind.PropertyNamingStrategies;

public class CustomNamingStrategy extends PropertyNamingStrategies.NamingBase {
    @Override
    public String translate(String propertyName) {
        return "custom_" + propertyName.toLowerCase();
    }
}

Custom Naming Strategy ব্যবহার:

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomNamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        // Custom Naming Strategy সেট করা
        mapper.setPropertyNamingStrategy(new CustomNamingStrategy());

        User user = new User("Custom", "Strategy");
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON (Custom): " + json);
    }
}

Output:

Serialized JSON (Custom): {"custom_firstname":"Custom","custom_lastname":"Strategy"}

Jackson Naming Strategy এর তুলনা

Naming StyleDescriptionExample
Camel Caseডিফল্ট স্টাইলfirstName
Snake Caseunderscore (_) দিয়ে পৃথকfirst_name
Kebab Caseহাইফেন (-) দিয়ে পৃথকfirst-name
Customপ্রয়োজন অনুযায়ী সংজ্ঞায়িতcustom_firstname

নামকরণ স্ট্র্যাটেজি সেট করার সুবিধা

  1. Consistency: JSON ডেটার ফরম্যাট স্ট্যান্ডার্ড রাখতে সাহায্য করে।
  2. Interoperability: বিভিন্ন সিস্টেম বা API-এর সাথে সমন্বয় সহজ হয়।
  3. Customization: বিশেষ প্রয়োজন অনুযায়ী JSON ফরম্যাট তৈরি করা যায়।

Jackson এর Snake Case, Kebab Case, এবং Camel Case কনফিগারেশন সহজ এবং কার্যকর। এছাড়াও, কাস্টম নামকরণ স্ট্র্যাটেজি ব্যবহার করে প্রয়োজন অনুযায়ী JSON ফরম্যাটিং কাস্টমাইজ করা যায়।

Content added By

Custom Naming কনভেনশন প্রয়োগ করা

194

Jackson ব্যবহার করে JSON ফিল্ডের নাম এবং জাভার ফিল্ডের নামের মধ্যে মেপিং করতে কাস্টম নামকরণের কনভেনশন প্রয়োগ করা যায়।


1. Custom Naming Strategy

Jackson PropertyNamingStrategy এবং JacksonAnnotationIntrospector ব্যবহার করে JSON ফিল্ডের নাম কাস্টমাইজ করতে সহায়তা করে।

উদাহরণ: Snake Case কনভেনশন

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;

class User {
    private String firstName;
    private String lastName;

    // Constructors, Getters, and Setters
    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

public class CustomNamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Snake Case Naming Strategy
        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

        User user = new User("John", "Doe");

        // Serialize
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + json);

        // Deserialize
        String userJson = "{\"first_name\":\"John\",\"last_name\":\"Doe\"}";
        User deserializedUser = mapper.readValue(userJson, User.class);
        System.out.println("Deserialized User: " + deserializedUser.getFirstName() + " " + deserializedUser.getLastName());
    }
}

আউটপুট:

Serialized JSON: {"first_name":"John","last_name":"Doe"}
Deserialized User: John Doe

2. @JsonProperty দিয়ে Custom Name নির্ধারণ করা

@JsonProperty ব্যবহার করে নির্দিষ্ট ফিল্ডের নাম কাস্টমাইজ করা যায়।

উদাহরণ: @JsonProperty ব্যবহার

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

class Employee {
    @JsonProperty("employee_id")
    private int id;

    @JsonProperty("employee_name")
    private String name;

    // Constructors, Getters, and Setters
    public Employee(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class JsonPropertyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        Employee employee = new Employee(1, "Alice");

        // Serialize
        String json = mapper.writeValueAsString(employee);
        System.out.println("Serialized JSON: " + json);

        // Deserialize
        String employeeJson = "{\"employee_id\":1,\"employee_name\":\"Alice\"}";
        Employee deserializedEmployee = mapper.readValue(employeeJson, Employee.class);
        System.out.println("Deserialized Employee: " + deserializedEmployee.getName());
    }
}

আউটপুট:

Serialized JSON: {"employee_id":1,"employee_name":"Alice"}
Deserialized Employee: Alice

3. Custom Naming Strategy ক্লাস তৈরি করা

Jackson-এ কাস্টম নামকরণ লজিক প্রয়োগ করতে একটি কাস্টম PropertyNamingStrategy তৈরি করা যায়।

উদাহরণ: Custom Naming Strategy

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.ObjectMapper;

class CustomNamingStrategy extends PropertyNamingStrategies.PropertyNamingStrategyBase {
    @Override
    public String translate(String propertyName) {
        // Custom naming logic: Prefix 'my_' to all properties
        return "my_" + propertyName;
    }
}

class Product {
    private String name;
    private double price;

    // Constructors, Getters, and Setters
    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

public class CustomNamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Custom Naming Strategy
        mapper.setPropertyNamingStrategy(new CustomNamingStrategy());

        Product product = new Product("Laptop", 1500.0);

        // Serialize
        String json = mapper.writeValueAsString(product);
        System.out.println("Serialized JSON: " + json);

        // Deserialize
        String productJson = "{\"my_name\":\"Laptop\",\"my_price\":1500.0}";
        Product deserializedProduct = mapper.readValue(productJson, Product.class);
        System.out.println("Deserialized Product: " + deserializedProduct.getName() + " - $" + deserializedProduct.getPrice());
    }
}

আউটপুট:

Serialized JSON: {"my_name":"Laptop","my_price":1500.0}
Deserialized Product: Laptop - $1500.0

4. Default Naming Strategies

Jackson ইতোমধ্যে বেশ কিছু ডিফল্ট Naming Strategies প্রদান করে:

  1. SNAKE_CASE: firstNamefirst_name
  2. UPPER_CAMEL_CASE: firstNameFirstName
  3. LOWER_CAMEL_CASE: firstNamefirstName (ডিফল্ট)
  4. KEBAB_CASE: firstNamefirst-name

Naming Strategy সেট করা

mapper.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);

5. টিপস

  1. Custom Logic প্রয়োজন হলে: কাস্টম PropertyNamingStrategy ব্যবহার করুন।
  2. Annotation প্রাধান্য: @JsonProperty ব্যবহার করলে সেটি কাস্টম Naming Strategy এর উপর প্রাধান্য পায়।
  3. Global Naming Strategy: পুরো অ্যাপ্লিকেশনে একধরনের নামকরণ প্রয়োগ করতে ObjectMapper-এ Naming Strategy সেট করুন।

6. Use Cases

  • API Integration: ভিন্ন কনভেনশনের API-এর সাথে কাজ করার জন্য।
  • Legacy Systems: পুরানো ডেটা ফরম্যাট বা কনভেনশন বজায় রাখতে।
  • Custom Requirements: স্পেসিফিক ডেটা ফরম্যাট কাস্টমাইজ করতে।

Jackson এর Naming Strategies এবং কাস্টম লজিক JSON ফিল্ড এবং জাভা প্রোপার্টির মধ্যে কাস্টমাইজড ম্যাপিং করতে কার্যকর। ছোট ফিল্ড কনফিগারেশনের জন্য @JsonProperty এবং বড় বা গ্লোবাল প্রয়োজনে Naming Strategy ব্যবহার করা উপযুক্ত।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...